﻿/* -----------------------------------------------------------------------------
 * Copyright (c) 2019-2021 linling
 *
 * 本软件"按原样"提供，没有任何明示或暗示的保证。 在任何情况下，作者均
 * 不对因使用本软件而导致的任何损害承担责任。 允许任何人将本软件用于
 * 任何目的（包括商业应用程序），并对其进行更改并自由重新分发，但受以下限制：
 *
 * 1.不得歪曲本软件的来源; 你不能声称你写了原始软件。 
 *   如果你在产品中使用此软件，在产品文档中的承认将不胜感激，但不是必需的。
 *
 * 2.更改的源版本必须明确标记，不得歪曲为原始软件。
 *
 * 3.不得从任何来源分发中删除或更改此通知。
 */
#ifndef __MODBUS_CRC_H
#define __MODBUS_CRC_H

#include "api.h" 



/// <summary>
/// 快速CRC16
/// </summary>
/// <param name="buff">输入要计算CRC16的数据</param>
/// <param name="len">字节长度</param>
/// <returns>16位的CRC校验值，大端模式</returns>
uint16 modbusCRC16(byte* buff, int len);


/// <summary>
/// 慢速CRC16
/// </summary>
/// <param name="buff">输入要计算CRC16的数据</param>
/// <param name="len">字节长度</param>
/// <returns>16位的CRC校验值，大端模式</returns>
uint16 modbusCRC16_bitwise(byte* buff, int len);

/// <summary>
/// 快速CRC16算法，适用于modbus
/// </summary>
/// <param name="ptr">输入要计算CRC16的数据</param>
/// <param name="len">字节长度</param>
/// <returns>16位的CRC校验值，大端模式</returns>
uint16 ModbusCRC16TableFast(const byte* ptr, int len);
#endif
